package main

import (
	"fmt"
)

// 自己实现的 队列
/****************************************/

type Queue struct {
	q []int
}

func queue() *Queue {
	return &Queue{q: make([]int, 0)}
}

func (this *Queue) push(key int) {
	this.q = append(this.q, key)
}

func (this *Queue) pop() {
	this.q = this.q[1:len(this.q)]
}

func (this *Queue) back() int {
	return this.q[len(this.q) - 1]
}

func (this *Queue) front() int {
	return this.q[0]
}

func (this *Queue) size() int {
	return len(this.q)
}

func (this *Queue) empty() bool {
	return len(this.q) == 0
}

func (this *Queue) clear() {
	this.q = this.q[:0]
}
/****************************************/

func main() {

	q := queue()
	q.push(4)  // 4
	q.push(3)  // 4,3
	q.push(7)  // 4,3,7
	q.pop()  // 3,7
	// 获取 queue 队首和队尾元素
	fmt.Println(q.front())  // 返回队首元素: 3
	fmt.Println(q.back())  // 返回队尾元素: 7
	// 清空 queue
	q.clear()
	fmt.Println(q.size())  // 0
	fmt.Println(q.empty())  // true
}
